package com.hxh.usermanagementsystem.util;

import cn.hutool.core.util.IdUtil;
import cn.hutool.crypto.SecureUtil;
import org.springframework.util.StringUtils;

/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * @date 2023/7/8 15:52
 * 密码工具类
 * 1、加密(加盐)
 * 2、解密
 */
public class PasswordUtil {

    // 对密码进行加密
    public static String encrypt(String password) {
        // 随机盐值
        String salt = IdUtil.simpleUUID();
        // 密码(md5(随机盐值 + 密码))
        String finalPassword = SecureUtil.md5(salt + password);
        // 随机盐值$最终加密密码
        return salt + "$" + finalPassword;
    }

    // 对密码进行解密
    //  md5(随机盐值＋用户输入的密码)==最终加密密码?密码正确:密码错误
    public static boolean decrypt(String password, String securePassword) {
        boolean result = false;
        if (StringUtils.hasLength(password) && StringUtils.hasLength(securePassword)) {
            if (securePassword.length() == 65 && securePassword.contains("$")) {
                String[] securePasswordArr = securePassword.split("\\$");
                // 盐值
                String salt = securePasswordArr[0];
                // 加密后的密码
                String finalPassword = securePasswordArr[1];
                // 将要验证的密码使用同一种盐值加密后进行比较
                password = SecureUtil.md5(salt + password);
                return password.equals(finalPassword);
            }
        }
        return result;
    }

    // 测试
    public static void main(String[] args) {
        String password = "123456";
        String dbPassword = PasswordUtil.encrypt(password);
        System.out.println("加密密码: " + dbPassword);
        System.out.println("对比结果1: " + PasswordUtil.decrypt("123", dbPassword));
        System.out.println("对比结果2: " + PasswordUtil.decrypt("123456", dbPassword));
    }
}
